home *** CD-ROM | disk | FTP | other *** search
/ ADA Programming Guide / ADA Programming Guide.iso / ada_lrm / chap12.doc < prev    next >
Text File  |  1996-01-30  |  42KB  |  1,032 lines

  1.                              12. Generic Units
  2.  
  3.  
  4. A generic unit is a program unit that is either a generic subprogram  or  a
  5. generic  package.   A generic unit is a template, which is parameterized or
  6. not, and from which corresponding (nongeneric) subprograms or packages  can
  7. be  obtained.   The resulting program units are said to be instances of the
  8. original generic unit.
  9.  
  10.  
  11. A generic unit  is  declared  by  a  generic  declaration.   This  form  of
  12. declaration  has  a  generic  formal  part  declaring  any  generic  formal
  13. parameters.  An instance of a generic unit is obtained as the result  of  a
  14. generic  instantiation  with  appropriate generic actual parameters for the
  15. generic formal parameters.  An  instance  of  a  generic  subprogram  is  a
  16. subprogram.  An instance of a generic package is a package.
  17.  
  18.  
  19. Generic  units are templates.  As templates they do not have the properties
  20. that are specific to their nongeneric counterparts.  For example, a generic
  21. subprogram can be instantiated but it cannot be called.  In  contrast,  the
  22. instance  of  a generic subprogram is a nongeneric subprogram;  hence, this
  23. instance can be called but it cannot be used to produce further  instances.
  24.  
  25.  
  26. References:   declaration  3.1,  generic  actual  parameter  12.3,  generic
  27. declaration 12.1, generic formal parameter 12.1, generic formal part  12.1,
  28. generic  instantiation 12.3, generic package 12.1, generic subprogram 12.1,
  29. instance 12.3, package 7, program unit 6, subprogram 6
  30.  
  31. 12.1  Generic Declarations
  32.  
  33.  
  34. A generic declaration declares a generic unit, which is  either  a  generic
  35. subprogram  or a generic package.  A generic declaration includes a generic
  36. formal part declaring any generic  formal  parameters.   A  generic  formal
  37. parameter  can  be  an  object;   alternatively  (unlike  a  parameter of a
  38. subprogram), it can be a type or a subprogram.
  39.  
  40.  
  41.     generic_declaration ::= generic_specification;
  42.  
  43.     generic_specification ::=
  44.          generic_formal_part subprogram_specification
  45.        | generic_formal_part package_specification
  46.  
  47.     generic_formal_part ::= generic {generic_parameter_declaration}
  48.  
  49.     generic_parameter_declaration ::=
  50.          identifier_list : [in [out]] type_mark [:= expression];
  51.        | type identifier is generic_type_definition;
  52.        | private_type_declaration
  53.        | with subprogram_specification [is name];
  54.        | with subprogram_specification [is <>];
  55.  
  56.     generic_type_definition ::=
  57.          (<>) | range <> | digits <> | delta <>
  58.        | array_type_definition | access_type_definition
  59.  
  60.  
  61. The terms generic formal object (or simply, formal object), generic  formal
  62. type  (or  simply,  formal type), and generic formal subprogram (or simply,
  63. formal subprogram) are  used  to  refer  to  corresponding  generic  formal
  64. parameters.
  65.  
  66.  
  67. The only form of subtype indication allowed within a generic formal part is
  68. a  type  mark (that is, the subtype indication must not include an explicit
  69. constraint).  The designator of a generic subprogram must be an identifier.
  70.  
  71.  
  72. Outside the specification and body of a generic  unit,  the  name  of  this
  73. program unit denotes the generic unit.  In contrast, within the declarative
  74. region  associated with a generic subprogram, the name of this program unit
  75. denotes the subprogram obtained by the current instantiation of the generic
  76. unit.  Similarly, within the declarative region associated with  a  generic
  77. package,  the name of this program unit denotes the package obtained by the
  78. current instantiation.
  79.  
  80.  
  81. The elaboration of a generic declaration has no other effect.
  82.  
  83.  
  84. Examples of generic formal parts:
  85.  
  86.     generic     --  parameterless
  87.  
  88.     generic
  89.        SIZE : NATURAL;  --  formal object
  90.  
  91.     generic
  92.        LENGTH : INTEGER := 200;           -- formal object with a default expression
  93.        AREA   : INTEGER := LENGTH*LENGTH; -- formal object with a default expression
  94.  
  95.     generic
  96.        type ITEM  is private;                       -- formal type
  97.        type INDEX is (<>);                          -- formal type
  98.        type ROW   is array(INDEX range <>) of ITEM; -- formal type
  99.        with function "<"(X, Y : ITEM) return BOOLEAN;    -- formal subprogram
  100.  
  101.  
  102. Examples of generic declarations declaring generic subprograms:
  103.  
  104.     generic
  105.        type ELEM is private;
  106.     procedure EXCHANGE(U, V : in out ELEM);
  107.  
  108.     generic
  109.        type ITEM is private;
  110.        with function "*"(U, V : ITEM) return ITEM is <>;
  111.     function SQUARING(X : ITEM) return ITEM;
  112.  
  113.  
  114. Example of a generic declaration declaring a generic package:
  115.  
  116.     generic
  117.        type ITEM   is private;
  118.        type VECTOR is array (POSITIVE range <>) of ITEM;
  119.        with function SUM(X, Y : ITEM) return ITEM;
  120.     package ON_VECTORS is
  121.        function SUM  (A, B : VECTOR) return VECTOR;
  122.        function SIGMA(A    : VECTOR) return ITEM;
  123.        LENGTH_ERROR : exception;
  124.     end;
  125.  
  126. Notes:
  127.  
  128.  
  129. Within a generic subprogram, the name of this program unit acts as the name
  130. of a subprogram.  Hence this name can be overloaded, and it can appear in a
  131. recursive call of the current instantiation.  For  the  same  reason,  this
  132. name  cannot  appear  after  the reserved word new in a (recursive) generic
  133. instantiation.
  134.  
  135.  
  136. An expression that occurs in a generic formal part is  either  the  default
  137. expression  for  a generic formal object of mode in, or a constituent of an
  138. entry name given as default name for a formal subprogram,  or  the  default
  139. expression for a parameter of a formal subprogram.  Default expressions for
  140. generic  formal  objects  and default names for formal subprograms are only
  141. evaluated for generic  instantiations  that  use  such  defaults.   Default
  142. expressions  for  parameters  of  formal subprograms are only evaluated for
  143. calls of the  formal  subprograms  that  use  such  defaults.   (The  usual
  144. visibility  rules  apply  to  any  name  used in a default expression:  the
  145. denoted entity must therefore be visible at the place of  the  expression.)
  146.  
  147.  
  148. Neither   generic  formal  parameters  nor  their  attributes  are  allowed
  149. constituents of static expressions (see 4.9).
  150.  
  151.  
  152. References:   access  type  definition  3.8,  array  type  definition  3.6,
  153. attribute   4.1.4,   constraint   3.3,  declaration  3.1,  designator  6.1,
  154. elaboration has no other effect 3.1, entity 3.1, expression  4.4,  function
  155. 6.5,  generic  instantiation  12.3,  identifier  2.3,  identifier list 3.2,
  156. instance  12.3,  name  4.1,  object  3.2,  overloading  6.6  8.7,   package
  157. specification  7.1,  parameter of a subprogram 6.2, private type definition
  158. 7.4, procedure 6.1, reserved word 2.9, static expression 4.9, subprogram 6,
  159. subprogram specification 6.1, subtype indication 3.3.2, type 3.3, type mark
  160. 3.3.2
  161.  
  162. 12.1.1  Generic Formal Objects
  163.  
  164.  
  165. The first form of generic parameter  declaration  declares  generic  formal
  166. objects.   The type of a generic formal object is the base type of the type
  167. denoted by the type mark given in the  generic  parameter  declaration.   A
  168. generic  parameter  declaration with several identifiers is equivalent to a
  169. sequence of single generic parameter declarations, as explained in  section
  170. 3.2.
  171.  
  172.  
  173. A  generic  formal  object  has a mode that is either in or in out.  In the
  174. absence of an explicit mode indication in a generic parameter  declaration,
  175. the  mode  in  is  assumed;  otherwise the mode is the one indicated.  If a
  176. generic parameter declaration ends with an expression,  the  expression  is
  177. the  default  expression  of  the  generic  formal  parameter.   A  default
  178. expression is only allowed  if  the  mode  is  in  (whether  this  mode  is
  179. indicated explicitly or implicitly).  The type of a default expression must
  180. be that of the corresponding generic formal parameter.
  181.  
  182.  
  183. A  generic  formal object of mode in is a constant whose value is a copy of
  184. the value supplied as the matching generic actual parameter  in  a  generic
  185. instantiation,  as described in section 12.3.  The type of a generic formal
  186. object of mode in must not be a  limited  type;   the  subtype  of  such  a
  187. generic  formal object is the subtype denoted by the type mark given in the
  188. generic parameter declaration.
  189.  
  190.  
  191. A generic formal object of mode in out is a variable and denotes the object
  192. supplied  as  the  matching  generic  actual   parameter   in   a   generic
  193. instantiation, as described in section 12.3.  The constraints that apply to
  194. the  generic  formal  object  are those of the corresponding generic actual
  195. parameter.
  196.  
  197. Note:
  198.  
  199.  
  200. The constraints that apply to a generic formal object of mode  in  out  are
  201. those  of  the corresponding generic actual parameter (not those implied by
  202. the type mark that appears in the generic parameter declaration).  Whenever
  203. possible (to avoid confusion) it is recommended that the  name  of  a  base
  204. type be used for the declaration of such a formal object.  If, however, the
  205. base  type is anonymous, it is recommended that the subtype name defined by
  206. the type declaration for the base type be used.
  207.  
  208.  
  209. References:  anonymous type 3.3.1, assignment 5.2, base type 3.3,  constant
  210. declaration  3.2, constraint 3.3, declaration 3.1, generic actual parameter
  211. 12.3, generic formal object 12.1, generic formal  parameter  12.1,  generic
  212. instantiation  12.3,  generic  parameter  declaration 12.1, identifier 2.3,
  213. limited type 7.4.4, matching generic actual parameter 12.3, mode 6.1,  name
  214. 4.1,  object  3.2, simple name 4.1, subtype 3.3, type declaration 3.3, type
  215. mark 3.3.2, variable 3.2.1
  216.  
  217. 12.1.2  Generic Formal Types
  218.  
  219.  
  220. A generic parameter declaration that includes a generic type definition  or
  221. a  private  type  declaration  declares  a  generic formal type.  A generic
  222. formal type denotes  the  subtype  supplied  as  the  corresponding  actual
  223. parameter  in  a  generic instantiation, as described in 12.3(d).  However,
  224. within a generic unit,  a  generic  formal  type  is  considered  as  being
  225. distinct  from  all  other  (formal  or  nonformal)  types.   The  form  of
  226. constraint applicable to a formal type in a subtype indication  depends  on
  227. the class of the type as for a nonformal type.
  228.  
  229.  
  230. The only form of discrete range that is allowed within the declaration of a
  231. generic formal (constrained) array type is a type mark.
  232.  
  233.  
  234. The  discriminant  part of a generic formal private type must not include a
  235. default expression for a discriminant.  (Consequently, a variable  that  is
  236. declared  by  an  object  declaration  must be constrained if its type is a
  237. generic formal type with discriminants.)
  238.  
  239.  
  240. Within the declaration and body of a generic unit, the operations available
  241. for values of a generic formal type (apart from  any  additional  operation
  242. specified  by  a  generic  formal subprogram) are determined by the generic
  243. parameter declaration for the formal type:
  244.  
  245.  
  246. (a)  For a private type declaration, the  available  operations  are  those
  247.      defined  in  section  7.4.2  (in particular, assignment, equality, and
  248.      inequality are available for a private type unless it is limited).
  249.  
  250.  
  251. (b)  For an array type  definition,  the  available  operations  are  those
  252.      defined  in  section 3.6.2 (for example, they include the formation of
  253.      indexed components and slices).
  254.  
  255.  
  256. (c)  For an access type definition,  the  available  operations  are  those
  257.      defined in section 3.8.2 (for example, allocators can be used).
  258.  
  259.  
  260. The  four forms of generic type definition in which a box appears (that is,
  261. the compound delimiter <>) correspond  to  the  following  major  forms  of
  262. scalar type:
  263.  
  264.  
  265. (d)  Discrete types:  (<>)
  266.  
  267.      The  available operations are the operations common to enumeration and
  268.      integer types; these are defined in section 3.5.5.
  269.  
  270.  
  271. (e)  Integer types:  range <>
  272.  
  273.      The available operations are the operations of integer  types  defined
  274.      in section 3.5.5.
  275.  
  276.  
  277. (f)  Floating point types:  digits <>
  278.  
  279.      The available operations are those defined in section 3.5.8.
  280.  
  281.  
  282. (g)  Fixed point types:  delta <>
  283.  
  284.      The available operations are those defined in section 3.5.10.
  285.  
  286.  
  287. In  all  of  the  above  cases  (a)  through (f), each operation implicitly
  288. associated with a formal type (that is, other than an  operation  specified
  289. by  a  formal  subprogram)  is  implicitly  declared  at  the  place of the
  290. declaration of the formal type.  The same holds for a  formal  fixed  point
  291. type,  except  for  the  multiplying operators that deliver a result of the
  292. type  universal_fixed  (see  4.5.5),  since  these  special  operators  are
  293. declared in the package STANDARD.
  294.  
  295.  
  296. For  an  instantiation of the generic unit, each of these operations is the
  297. corresponding basic operation or predefined operator of the matching actual
  298. type.  For an operator, this rule applies even if  the  operator  has  been
  299. redefined  for  the actual type or for some parent type of the actual type.
  300.  
  301.  
  302. Examples of generic formal types:
  303.  
  304.     type ITEM is private;
  305.     type BUFFER(LENGTH : NATURAL) is limited private;
  306.  
  307.     type ENUM  is (<>);
  308.     type INT   is range <>;
  309.     type ANGLE is delta <>;
  310.     type MASS  is digits <>;
  311.  
  312.     type TABLE is array (ENUM) of ITEM;
  313.  
  314.  
  315. Example of a generic formal part declaring a formal integer type:
  316.  
  317.     generic
  318.        type RANK is range <>;
  319.        FIRST  : RANK := RANK'FIRST;
  320.        SECOND : RANK := FIRST + 1;  --  the operator "+" of the type RANK
  321.  
  322.  
  323. References:   access  type  definition  3.8,  allocator  4.8,  array   type
  324. definition  3.6, assignment 5.2, body of a generic unit 12.2, class of type
  325. 3.3, constraint 3.3, declaration 3.1, declaration of a generic  unit  12.1,
  326. discrete range 3.6, discrete type 3.5, discriminant part 3.7.1, enumeration
  327. type  3.5.1,  equality  4.5.2,  fixed point type 3.5.9, floating point type
  328. 3.5.7, generic actual type 12.3, generic formal part 12.1,  generic  formal
  329. subprogram  12.1.3, generic formal type 12.1, generic parameter declaration
  330. 12.1, generic type definition 12.1,  indexed  component  4.1.1,  inequality
  331. 4.5.2,  instantiation 12.3, integer type 3.5.4, limited private type 7.4.4,
  332. matching generic actual  type  12.3.2  12.3.3  12.3.4  12.3.5,  multiplying
  333. operator  4.5  4.5.5, operation 3.3, operator 4.5, parent type 3.4, private
  334. type definition 7.4, scalar type 3.5, slice 4.1.2, standard package 8.6  C,
  335. subtype indication 3.3.2, type mark 3.3.2, universal_fixed 3.5.9
  336.  
  337. 12.1.3  Generic Formal Subprograms
  338.  
  339.  
  340. A  generic  parameter  declaration that includes a subprogram specification
  341. declares a generic formal subprogram.
  342.  
  343.  
  344. Two alternative forms of defaults can be specified in the declaration of  a
  345. generic formal subprogram.  In these forms, the subprogram specification is
  346. followed  by  the  reserved  word  is  and  either  a  box or the name of a
  347. subprogram or entry.  The matching rules for these defaults  are  explained
  348. in section 12.3.6.
  349.  
  350.  
  351. A generic formal subprogram denotes the subprogram, enumeration literal, or
  352. entry  supplied  as the corresponding generic actual parameter in a generic
  353. instantiation, as described in section 12.3(f).
  354.  
  355.  
  356. Examples of generic formal subprograms:
  357.  
  358.     with function INCREASE(X : INTEGER) return INTEGER;
  359.     with function SUM(X, Y : ITEM) return ITEM;
  360.  
  361.     with function "+"(X, Y : ITEM) return ITEM is <>;
  362.     with function IMAGE(X : ENUM) return STRING is ENUM'IMAGE;
  363.  
  364.     with procedure UPDATE is DEFAULT_UPDATE;
  365.  
  366. Notes:
  367.  
  368.  
  369. The constraints that apply to a parameter of a formal subprogram are  those
  370. of  the corresponding parameter in the specification of the matching actual
  371. subprogram (not those  implied  by  the  corresponding  type  mark  in  the
  372. specification  of  the formal subprogram).  A similar remark applies to the
  373. result of a function.   Whenever  possible  (to  avoid  confusion),  it  is
  374. recommended  that the name of a base type be used rather than the name of a
  375. subtype in any declaration of a formal subprogram.  If, however,  the  base
  376. type  is  anonymous, it is recommended that the subtype name defined by the
  377. type declaration be used.
  378.  
  379.  
  380. The type specified for a formal parameter of a  generic  formal  subprogram
  381. can  be  any  visible  type,  including  a  generic formal type of the same
  382. generic formal part.
  383.  
  384.  
  385. References:  anonymous type 3.3.1, base type  3.3,  box  delimiter  12.1.2,
  386. constraint  3.3,  designator  6.1,  generic  actual parameter 12.3, generic
  387. formal function 12.1, generic formal subprogram 12.1, generic instantiation
  388. 12.3, generic parameter declaration 12.1, identifier 2.3, matching  generic
  389. actual  subprogram  12.3.6,  operator symbol 6.1, parameter of a subprogram
  390. 6.2, renaming declaration 8.5, reserved word 2.9, scope 8.2, subprogram  6,
  391. subprogram specification 6.1, subtype 3.3.2, type 3.3, type mark 3.3.2
  392.  
  393. 12.2  Generic Bodies
  394.  
  395.  
  396. The  body  of a generic subprogram or generic package is a template for the
  397. bodies of the corresponding subprograms or  packages  obtained  by  generic
  398. instantiations.   The  syntax  of  a generic body is identical to that of a
  399. nongeneric body.
  400.  
  401.  
  402. For each declaration of a generic subprogram, there must be a corresponding
  403. body.
  404.  
  405.  
  406. The elaboration of a generic body has no other  effect  than  to  establish
  407. that  the  body  can from then on be used as the template for obtaining the
  408. corresponding instances.
  409.  
  410.  
  411. Example of a generic procedure body:
  412.  
  413.     procedure EXCHANGE(U, V : in out ELEM) is  --  see example in 12.1
  414.        T : ELEM;  --  the generic formal type
  415.     begin
  416.        T := U;
  417.        U := V;
  418.        V := T;
  419.     end EXCHANGE;
  420.  
  421.  
  422. Example of a generic function body:
  423.  
  424.     function SQUARING(X : ITEM) return ITEM is  --  see example in 12.1
  425.     begin
  426.        return X*X;  --  the formal operator "*"
  427.     end;
  428.  
  429.  
  430. Example of a generic package body:
  431.  
  432.     package body ON_VECTORS is  --  see example in 12.1
  433.  
  434.        function SUM(A, B : VECTOR) return VECTOR is
  435.           RESULT : VECTOR(A'RANGE);     --  the formal type VECTOR
  436.           BIAS   : constant INTEGER := B'FIRST - A'FIRST;
  437.        begin
  438.           if A'LENGTH /= B'LENGTH then
  439.              raise LENGTH_ERROR;
  440.           end if;
  441.  
  442.           for N in A'RANGE loop
  443.              RESULT(N) := SUM(A(N), B(N + BIAS));    --  the formal function SUM
  444.           end loop;
  445.           return RESULT;
  446.        end;
  447.  
  448.        function SIGMA(A : VECTOR) return ITEM is
  449.           TOTAL : ITEM := A(A'FIRST);                --  the formal type ITEM
  450.        begin
  451.           for N in A'FIRST + 1 .. A'LAST loop
  452.              TOTAL := SUM(TOTAL, A(N));              --  the formal function SUM
  453.           end loop;
  454.           return TOTAL;
  455.        end;
  456.     end;
  457.  
  458.  
  459. References:   body  3.9,  elaboration  3.9,  generic  body  12.1,   generic
  460. instantiation 12.3, generic package 12.1, generic subprogram 12.1, instance
  461. 12.3, package body 7.1, package 7, subprogram 6, subprogram body 6.3
  462.  
  463. 12.3  Generic Instantiation
  464.  
  465.  
  466. An instance of a generic unit is declared by a generic instantiation.
  467.  
  468.  
  469.     generic_instantiation ::=
  470.          package identifier is
  471.              new generic_package_name [generic_actual_part];
  472.        | procedure identifier is
  473.              new generic_procedure_name [generic_actual_part];
  474.        | function designator is
  475.              new generic_function_name [generic_actual_part];
  476.  
  477.     generic_actual_part ::=
  478.        (generic_association {, generic_association})
  479.  
  480.     generic_association ::=
  481.        [generic_formal_parameter =>] generic_actual_parameter
  482.  
  483.     generic_formal_parameter ::= parameter_simple_name | operator_symbol
  484.  
  485.     generic_actual_parameter ::= expression | variable_name
  486.        | subprogram_name | entry_name | type_mark
  487.  
  488.  
  489. An  explicit  generic  actual  parameter  must be supplied for each generic
  490. formal parameter, unless the corresponding  generic  parameter  declaration
  491. specifies  that  a default can be used.  Generic associations can be either
  492. positional or named  in  the  same  manner  as  parameter  associations  of
  493. subprogram  calls  (see  6.4).   If two or more formal subprograms have the
  494. same  designator,  then  named  associations  are  not  allowed   for   the
  495. corresponding generic parameters.
  496.  
  497.  
  498. Each  generic  actual parameter must match the corresponding generic formal
  499. parameter.  An expression can match a formal object of mode in;  a variable
  500. name can match a formal object of mode in out;  a  subprogram  name  or  an
  501. entry  name  can match a formal subprogram;  a type mark can match a formal
  502. type.  The detailed  rules  defining  the  allowed  matches  are  given  in
  503. sections 12.3.1 to 12.3.6;  these are the only allowed matches.
  504.  
  505.  
  506. The  instance  is a copy of the generic unit, apart from the generic formal
  507. part;  thus the instance of a generic package  is  a  package,  that  of  a
  508. generic  procedure  is  a  procedure,  and  that of a generic function is a
  509. function.  For each  occurrence, within the generic unit, of  a  name  that
  510. denotes  a given entity, the following list defines which entity is denoted
  511. by the corresponding occurrence within the instance.
  512.  
  513.  
  514. (a)  For a  name  that  denotes  the  generic  unit:     The  corresponding
  515.      occurrence denotes the instance.
  516.  
  517.  
  518. (b)  For a name that denotes a generic formal  object  of  mode  in:    The
  519.      corresponding  name  denotes  a  constant whose value is a copy of the
  520.      value of the associated generic actual parameter.
  521.  
  522.  
  523. (c)  For a name that denotes a generic formal object of mode in out:    The
  524.      corresponding  name  denotes  the  variable  named  by  the associated
  525.      generic actual parameter.
  526.  
  527.  
  528. (d)  For a name that denotes a generic  formal  type:    The  corresponding
  529.      name  denotes  the  subtype  named  by  the  associated generic actual
  530.      parameter (the actual subtype).
  531.  
  532.  
  533. (e)  For a name that denotes a discriminant of a generic formal type:   The
  534.      corresponding name denotes the corresponding discriminant (there  must
  535.      be one) of the actual type associated with the generic formal type.
  536.  
  537.  
  538. (f)  For  a  name  that  denotes  a  generic  formal   subprogram:      The
  539.      corresponding  name  denotes  the  subprogram, enumeration literal, or
  540.      entry named by the associated generic  actual  parameter  (the  actual
  541.      subprogram).
  542.  
  543.  
  544. (g)  For a name that  denotes  a  formal  parameter  of  a  generic  formal
  545.      subprogram:    The corresponding name denotes the corresponding formal
  546.      parameter  of  the  actual  subprogram  associated  with  the   formal
  547.      subprogram.
  548.  
  549.  
  550. (h)  For a name that denotes a local entity  declared  within  the  generic
  551.      unit:    The  corresponding  name  denotes  the entity declared by the
  552.      corresponding local declaration within the instance.
  553.  
  554.  
  555. (i)  For a name that denotes  a  global  entity  declared  outside  of  the
  556.      generic unit:   The corresponding name denotes the same global entity.
  557.  
  558.  
  559. Similar  rules  apply  to  operators  and basic operations:  in particular,
  560. formal operators follow a rule similar to rule (f), local operations follow
  561. a rule similar to rule (h), and operations for global types follow  a  rule
  562. similar  to rule (i).  In addition, if within the generic unit a predefined
  563. operator or basic operation of a formal  type  is  used,  then  within  the
  564. instance   the   corresponding   occurrence  refers  to  the  corresponding
  565. predefined operation of the actual type associated with the formal type.
  566.  
  567.  
  568. The above rules apply also to any type mark or (default)  expression  given
  569. within the generic formal part of the generic unit.
  570.  
  571.  
  572. For the elaboration of a generic instantiation, each expression supplied as
  573. an  explicit  generic  actual parameter is first evaluated, as well as each
  574. expression that appears as a constituent of a variable name or  entry  name
  575. supplied  as  an  explicit  generic  actual  parameter;   these evaluations
  576. proceed in some order that is not defined by the language.  Then, for  each
  577. omitted  generic association (if any), the corresponding default expression
  578. or default name is evaluated;  such evaluations are performed in the  order
  579. of  the  generic parameter declarations.  Finally, the implicitly generated
  580. instance is elaborated.  The elaboration of  a  generic  instantiation  may
  581. also  involve  certain constraint checks as described in later subsections.
  582.  
  583.  
  584. Recursive generic instantiation is not allowed in the following sense:   if
  585. a  given  generic  unit includes an instantiation of a second generic unit,
  586. then the instance generated by  this  instantiation  must  not  include  an
  587. instance  of  the  first  generic  unit (whether this instance is generated
  588. directly, or indirectly by intermediate instantiations).
  589.  
  590.  
  591. Examples of generic instantiations (see 12.1):
  592.  
  593.     procedure SWAP is new EXCHANGE(ELEM => INTEGER);
  594.     procedure SWAP is new EXCHANGE(CHARACTER);  --  SWAP is overloaded
  595.  
  596.     function SQUARE is new SQUARING(INTEGER);  --  "*" of INTEGER used by default
  597.     function SQUARE is new SQUARING(ITEM => MATRIX, "*" => MATRIX_PRODUCT);
  598.     function SQUARE is new SQUARING(MATRIX, MATRIX_PRODUCT); -- same as previous
  599.     package INT_VECTORS is new ON_VECTORS(INTEGER, TABLE, "+");
  600.  
  601.  
  602. Examples of uses of instantiated units:
  603.  
  604.     SWAP(A, B);
  605.     A := SQUARE(A);
  606.  
  607.     T : TABLE(1 .. 5) := (10, 20, 30, 40, 50);
  608.     N : INTEGER := INT_VECTORS.SIGMA(T);  --  150 (see 12.2 for the body of SIGMA)
  609.  
  610.     use INT_VECTORS;
  611.     M : INTEGER := SIGMA(T);  --  150
  612.  
  613. Notes:
  614.  
  615.  
  616. Omission of a generic actual parameter is only allowed if  a  corresponding
  617. default exists.  If default expressions or default names (other than simple
  618. names) are used, they are evaluated in the order in which the corresponding
  619. generic formal parameters are declared.
  620.  
  621.  
  622. If  two  overloaded subprograms declared in a generic package specification
  623. differ only by the (formal) type of  their  parameters  and  results,  then
  624. there  exist  legal instantiations for which all calls of these subprograms
  625. from outside the instance are ambiguous.  For example:
  626.  
  627.     generic
  628.        type A is (<>);
  629.        type B is private;
  630.     package G is
  631.        function NEXT(X : A) return A;
  632.        function NEXT(X : B) return B;
  633.     end;
  634.  
  635.     package P is new G(A => BOOLEAN, B => BOOLEAN);
  636.     -- calls of P.NEXT are ambiguous
  637.  
  638.  
  639. References:   declaration  3.1,   designator   6.1,   discriminant   3.7.1,
  640. elaboration 3.1 3.9, entity 3.1, entry name 9.5, evaluation 4.5, expression
  641. 4.4,  generic  formal  object  12.1, generic formal parameter 12.1, generic
  642. formal  subprogram  12.1,  generic  formal  type  12.1,  generic  parameter
  643. declaration   12.1,   global  declaration  8.1,  identifier  2.3,  implicit
  644. declaration 3.1, local declaration 8.1, mode in 12.1.1, mode in out 12.1.1,
  645. name 4.1, operation 3.3, operator symbol 6.1, overloading 6.6 8.7,  package
  646. 7, simple name 4.1, subprogram 6, subprogram call 6.4, subprogram name 6.1,
  647. subtype  declaration 3.3.2, type mark 3.3.2, variable 3.2.1, visibility 8.3
  648.  
  649. 12.3.1  Matching Rules for Formal Objects
  650.  
  651.  
  652. A generic formal parameter of mode in of a given  type  is  matched  by  an
  653. expression of the same type.  If a generic unit has a generic formal object
  654. of  mode  in,  a check is made that the value of the expression  belongs to
  655. the subtype  denoted  by  the  type  mark,  as  for  an  explicit  constant
  656. declaration  (see  3.2.1). The exception CONSTRAINT_ERROR is raised if this
  657. check fails.
  658.  
  659.  
  660. A generic formal parameter of mode in out of a given type is matched by the
  661. name of a variable of the same type.  The variable must  not  be  a  formal
  662. parameter  of  mode  out or a subcomponent thereof.  The name must denote a
  663. variable for which renaming is allowed (see 8.5).
  664.  
  665. Notes:
  666.  
  667.  
  668. The type of a generic actual parameter of mode in must  not  be  a  limited
  669. type.   The constraints that apply to a generic formal parameter of mode in
  670. out are those of the corresponding generic actual parameter  (see  12.1.1).
  671.  
  672.  
  673. References:   constraint  3.3,  constraint_error exception 11.1, expression
  674. 4.4, formal parameter 6.1, generic actual parameter  12.3,  generic  formal
  675. object  12.1.1,  generic formal parameter 12.1, generic instantiation 12.3,
  676. generic unit 12.1, limited type 7.4.4, matching  generic  actual  parameter
  677. 12.3,  mode  in 12.1.1, mode in out 12.1.1, mode out 6.2, name 4.1, raising
  678. of exceptions 11, satisfy 3.3, subcomponent 3.3, type 3.3, type mark 3.3.2,
  679. variable 3.2.1
  680.  
  681. 12.3.2  Matching Rules for Formal Private Types
  682.  
  683.  
  684. A generic formal private type is matched by any type or subtype (the actual
  685. subtype) that satisfies the following conditions:
  686.  
  687.  
  688.   -  If the formal type is not limited, the  actual  type  must  not  be  a
  689.      limited  type.  (If, on the other hand, the formal type is limited, no
  690.      such condition is imposed on the corresponding actual type, which  can
  691.      be limited or not limited.)
  692.  
  693.  
  694.   -  If the formal type has a discriminant part, the actual type must be  a
  695.      type   with   the  same  number  of  discriminants;   the  type  of  a
  696.      discriminant that appears at a given position in the discriminant part
  697.      of the actual type must be the same as the type  of  the  discriminant
  698.      that  appears  at  the  same  position in the discriminant part of the
  699.      formal type;  and the actual subtype must be unconstrained.   (If,  on
  700.      the  other hand, the formal type has no discriminants, the actual type
  701.      is allowed to have discriminants.)
  702.  
  703.  
  704. Furthermore, consider any occurrence of the name of the formal  type  at  a
  705. place  where this name is used as an unconstrained subtype indication.  The
  706. actual subtype must not be an unconstrained array type or an  unconstrained
  707. type  with  discriminants,  if any of these occurrences is at a place where
  708. either a constraint or default discriminants would be required for an array
  709. type or for a type with discriminants (see  3.6.1  and  3.7.2).   The  same
  710. restriction  applies  to occurrences of the name of a subtype of the formal
  711. type, and to occurrences of the  name  of  any  type  or  subtype  derived,
  712. directly or indirectly, from the formal type.
  713.  
  714.  
  715. If  a  generic  unit  has  a  formal  private  type with discriminants, the
  716. elaboration of  a  corresponding  generic  instantiation  checks  that  the
  717. subtype  of each discriminant of the actual type is the same as the subtype
  718. of the corresponding  discriminant  of  the  formal  type.   The  exception
  719. CONSTRAINT_ERROR is raised if this check fails.
  720.  
  721.  
  722. References:   array  type  3.6,  constraint 3.3, constraint_error exception
  723. 11.1, default expression  for  a  discriminant  3.7.1,  derived  type  3.4,
  724. discriminant  3.7.1,  discriminant  part  3.7.1,  elaboration  3.9, generic
  725. actual type 12.3, generic body 12.2, generic formal  type  12.1.2,  generic
  726. instantiation   12.3,  generic  specification  12.1,  limited  type  7.4.4,
  727. matching generic actual parameter 12.3, name 4.1, private type 7.4, raising
  728. of exceptions 11, subtype 3.3, subtype indication  3.3.2,  type  3.3,  type
  729. with discriminants 3.3, unconstrained array type 3.6, unconstrained subtype
  730. 3.3
  731.  
  732. 12.3.3  Matching Rules for Formal Scalar Types
  733.  
  734.  
  735. A  generic  formal  type defined by (<>) is matched by any discrete subtype
  736. (that is, any enumeration or  integer  subtype).   A  generic  formal  type
  737. defined  by  range <> is matched by any integer subtype.   A generic formal
  738. type defined by digits <> is matched by  any  floating  point  subtype.   A
  739. generic  formal  type  defined  by  delta  <> is matched by any fixed point
  740. subtype.  No other matches are possible for these generic formal types.
  741.  
  742.  
  743. References:  box delimiter 12.1.2,  discrete  type  3.5,  enumeration  type
  744. 3.5.1,  fixed  point  type 3.5.9, floating point type 3.5.7, generic actual
  745. type 12.3, generic  formal  type  12.1.2,  generic  type  definition  12.1,
  746. integer type 3.5.4, matching generic actual parameter 12.3, scalar type 3.5
  747.  
  748. 12.3.4  Matching Rules for Formal Array Types
  749.  
  750.  
  751. A  formal  array  type is matched by an actual array subtype that satisfies
  752. the following conditions:
  753.  
  754.  
  755.   -  The formal array type and the actual array type  must  have  the  same
  756.      dimensionality;  the formal type and the actual subtype must be either
  757.      both constrained or both unconstrained.
  758.  
  759.  
  760.   -  For each index position, the index type  must  be  the  same  for  the
  761.      actual array type as for the formal array type.
  762.  
  763.  
  764.   -  The component type must be the same for the actual array type  as  for
  765.      the  formal  array type.  If the component type is other than a scalar
  766.      type, then the component subtypes must be either both  constrained  or
  767.      both unconstrained.
  768.  
  769.  
  770. If  a  generic  unit  has  a  formal  array  type,  the  elaboration  of  a
  771. corresponding instantiation checks that the constraints  (if  any)  on  the
  772. component  type  are  the  same for the actual array type as for the formal
  773. array type, and likewise that  for  any  given  index  position  the  index
  774. subtypes  or  the  discrete  ranges  have  the  same bounds.  The exception
  775. CONSTRAINT_ERROR is raised if this check fails.
  776.  
  777.  
  778. Example:
  779.  
  780.     --  given the generic package
  781.  
  782.     generic
  783.        type ITEM   is private;
  784.        type INDEX  is (<>);
  785.        type VECTOR is array (INDEX range <>) of ITEM;
  786.        type TABLE  is array (INDEX) of ITEM;
  787.     package P is
  788.        ...
  789.     end;
  790.  
  791.     --  and the types
  792.  
  793.     type MIX    is array (COLOR range <>) of BOOLEAN;
  794.     type OPTION is array (COLOR) of BOOLEAN;
  795.  
  796.     --  then MIX can match VECTOR and OPTION can match TABLE
  797.  
  798.     package R is new P(ITEM   => BOOLEAN, INDEX => COLOR,
  799.                        VECTOR => MIX,     TABLE => OPTION);
  800.  
  801.     --  Note that MIX cannot match TABLE and OPTION cannot match VECTOR
  802.  
  803. Note:
  804.  
  805.  
  806. For the above rules, if any of the index or component types of  the  formal
  807. array  type  is  itself  a  formal  type, then within the instance its name
  808. denotes the corresponding actual subtype (see 12.3(d)).
  809.  
  810.  
  811. References:  array type 3.6, array type definition  3.6,  component  of  an
  812. array  3.6,  constrained  array  type 3.6, constraint 3.3, constraint_error
  813. exception 11.1, elaboration 3.9, formal  type  12.1,  generic  formal  type
  814. 12.1.2,  generic  instantiation  12.3,  index  3.6, index constraint 3.6.1,
  815. matching generic actual parameter 12.3, raise statement 11.3, subtype  3.3,
  816. unconstrained array type 3.6
  817.  
  818. 12.3.5  Matching Rules for Formal Access Types
  819.  
  820.  
  821. A  formal access type is matched by an actual access subtype if the type of
  822. the designated objects is the same for the actual type as  for  the  formal
  823. type.   If  the  designated  type  is  other  than  a scalar type, then the
  824. designated subtypes must be either both constrained or both  unconstrained.
  825.  
  826.  
  827. If  a  generic  unit  has  a  formal  access  type,  the  elaboration  of a
  828. corresponding instantiation checks that any constraints on  the  designated
  829. objects are the same for the actual access subtype as for the formal access
  830. type.  The exception CONSTRAINT_ERROR is raised if this check fails.
  831.  
  832.  
  833. Example:
  834.  
  835.     --  the formal types of the generic package
  836.  
  837.     generic
  838.        type NODE is private;
  839.        type LINK is access NODE;
  840.     package P is
  841.        ...
  842.     end;
  843.  
  844.     --  can be matched by the actual types
  845.  
  846.     type CAR;
  847.     type CAR_NAME is access CAR;
  848.  
  849.     type CAR is
  850.        record
  851.           PRED, SUCC : CAR_NAME;
  852.           NUMBER     : LICENSE_NUMBER;
  853.           OWNER      : PERSON;
  854.        end record;
  855.  
  856.     --  in the following generic instantiation
  857.  
  858.     package R is new P(NODE => CAR, LINK => CAR_NAME);
  859.  
  860. Note:
  861.  
  862.  
  863. For  the  above rules, if the designated type is itself a formal type, then
  864. within the instance its name denotes the corresponding actual subtype  (see
  865. 12.3(d)).
  866.  
  867.  
  868. References:   access  type 3.8, access type definition 3.8, constraint 3.3,
  869. constraint_error exception 11.1, designate 3.8,  elaboration  3.9,  generic
  870. formal  type  12.1.2,  generic  instantiation 12.3, matching generic actual
  871. parameter 12.3, object 3.2, raise statement 11.3, value of access type  3.8
  872.  
  873. 12.3.6  Matching Rules for Formal Subprograms
  874.  
  875.  
  876. A  formal  subprogram  is  matched  by  an  actual  subprogram, enumeration
  877. literal, or entry if both have the same parameter and result  type  profile
  878. (see  6.6);   in  addition,  parameter  modes  must be identical for formal
  879. parameters that are at the same parameter position.
  880.  
  881.  
  882. If a generic unit has a default subprogram specified by a name,  this  name
  883. must denote a subprogram, an enumeration literal, or an entry, that matches
  884. the  formal subprogram (in the above sense).  The evaluation of the default
  885. name takes place during the elaboration of each instantiation that uses the
  886. default,  as defined in section 12.3.
  887.  
  888.  
  889. If a generic unit has  a  default  subprogram  specified   by  a  box,  the
  890. corresponding  actual parameter can be omitted if a subprogram, enumeration
  891. literal, or entry  matching  the  formal  subprogram,  and  with  the  same
  892. designator  as  the  formal subprogram, is directly visible at the place of
  893. the generic instantiation;  this subprogram, enumeration literal, or  entry
  894. is  then used by default (there must be exactly one subprogram, enumeration
  895. literal, or entry satisfying the previous conditions).
  896.  
  897.  
  898. Example:
  899.  
  900.     --  given the generic function specification
  901.  
  902.     generic
  903.        type ITEM is private;
  904.        with function "*" (U, V : ITEM) return ITEM is <>;
  905.     function SQUARING(X : ITEM) return ITEM;
  906.  
  907.     --  and the function
  908.  
  909.     function MATRIX_PRODUCT(A, B : MATRIX) return MATRIX;
  910.  
  911.     --  the following instantiation is possible
  912.  
  913.     function SQUARE is new SQUARING(MATRIX, MATRIX_PRODUCT);
  914.  
  915.     --  the following instantiations are equivalent
  916.  
  917.     function SQUARE is new SQUARING(ITEM => INTEGER, "*" => "*");
  918.     function SQUARE is new SQUARING(INTEGER, "*");
  919.     function SQUARE is new SQUARING(INTEGER);
  920.  
  921. Notes:
  922.  
  923.  
  924. The matching rules for  formal  subprograms  state  requirements  that  are
  925. similar  to  those  applying to subprogram renaming declarations (see 8.5).
  926. In particular, the name of a parameter of the formal subprogram need not be
  927. the same as that of the corresponding parameter of the  actual  subprogram;
  928. similarly,  for  these parameters, default expressions need not correspond.
  929.  
  930.  
  931. A formal subprogram is matched by an attribute of a type if  the  attribute
  932. is  a  function with a matching specification.  An enumeration literal of a
  933. given type matches a parameterless formal function whose result type is the
  934. given type.
  935.  
  936.  
  937. References:  attribute 4.1.4, box delimiter 12.1.2, designator  6.1,  entry
  938. 9.5,  function  6.5,  generic  actual  type 12.3, generic formal subprogram
  939. 12.1.3, generic formal type 12.1.2, generic  instantiation  12.3,  matching
  940. generic  actual parameter 12.3, name 4.1, parameter and result type profile
  941. 6.3, subprogram 6, subprogram specification 6.1,  subtype  3.3,  visibility
  942. 8.3
  943.  
  944. 12.4  Example of a Generic Package
  945.  
  946.  
  947. The following example provides a possible formulation of stacks by means of
  948. a  generic  package.   The  size  of  each  stack and the type of the stack
  949. elements are provided as generic parameters.
  950.  
  951.  
  952.     generic
  953.        SIZE : POSITIVE;
  954.        type ITEM is private;
  955.     package STACK is
  956.        procedure PUSH(E : in  ITEM);
  957.        procedure POP (E : out ITEM);
  958.        OVERFLOW, UNDERFLOW : exception;
  959.     end STACK;
  960.  
  961.     package body STACK is
  962.  
  963.        type TABLE is array (POSITIVE range <>) of ITEM;
  964.        SPACE : TABLE(1 .. SIZE);
  965.        INDEX : NATURAL := 0;
  966.  
  967.        procedure PUSH(E : in ITEM) is
  968.        begin
  969.           if INDEX >= SIZE then
  970.              raise OVERFLOW;
  971.           end if;
  972.           INDEX := INDEX + 1;
  973.           SPACE(INDEX) := E;
  974.        end PUSH;
  975.  
  976.        procedure POP(E : out ITEM) is
  977.        begin
  978.           if INDEX = 0 then
  979.              raise UNDERFLOW;
  980.           end if;
  981.           E := SPACE(INDEX);
  982.           INDEX := INDEX - 1;
  983.        end POP;
  984.  
  985.     end STACK;
  986.  
  987.  
  988. Instances of this generic package can be obtained as follows:
  989.  
  990.     package STACK_INT  is new STACK(SIZE => 200, ITEM => INTEGER);
  991.     package STACK_BOOL is new STACK(100, BOOLEAN);
  992.  
  993.  
  994. Thereafter, the procedures of the instantiated packages can  be  called  as
  995. follows:
  996.  
  997.     STACK_INT.PUSH(N);
  998.     STACK_BOOL.PUSH(TRUE);
  999.  
  1000.  
  1001. Alternatively,  a  generic  formulation  of  the type STACK can be given as
  1002. follows (package body omitted):
  1003.  
  1004.     generic
  1005.        type ITEM is private;
  1006.     package ON_STACKS is
  1007.        type STACK(SIZE : POSITIVE) is limited private;
  1008.        procedure PUSH(S : in out STACK; E : in  ITEM);
  1009.        procedure POP (S : in out STACK; E : out ITEM);
  1010.        OVERFLOW, UNDERFLOW : exception;
  1011.     private
  1012.        type TABLE is array (POSITIVE range <>) of ITEM;
  1013.        type STACK(SIZE : POSITIVE) is
  1014.           record
  1015.              SPACE : TABLE(1 .. SIZE);
  1016.              INDEX : NATURAL := 0;
  1017.           end record;
  1018.     end;
  1019.  
  1020.  
  1021. In order to use such a  package,  an  instantiation  must  be  created  and
  1022. thereafter stacks of the corresponding type can be declared:
  1023.  
  1024.     declare
  1025.        package STACK_REAL is new ON_STACKS(REAL); use STACK_REAL;
  1026.        S : STACK(100);
  1027.     begin
  1028.        ...
  1029.        PUSH(S, 2.54);
  1030.        ...
  1031.     end;
  1032.